package com.ufgov.agcfs.baseData.service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springside.modules.persistence.SearchFilter;

import com.ufgov.agcfs.baseData.dao.UpdateTypeDao;
import com.ufgov.agcfs.baseData.entity.AssetType;
import com.ufgov.agcfs.baseData.entity.BookType;
import com.ufgov.agcfs.baseData.entity.UpdateType;
import com.ufgov.agcfs.pub.UUID;
import com.ufgov.agcfs.report.entity.Report;

@Service
@Transactional(propagation = Propagation.REQUIRES_NEW)
public class UpdateTypeService {
	@Autowired
	public UpdateTypeDao updateTypeDao;
	
	public List<UpdateType> getUpdateList(String nd){
		UpdateType updateType = new UpdateType();
		updateType.setNd(nd);
		return updateTypeDao.getUpdateList(updateType);
	}
	
	public List<UpdateType> findAll(){
		UpdateType updateType = new UpdateType();
		return updateTypeDao.findAllUpdateType(updateType);
	}
	
	
	public List<UpdateType> findByNd(String nd){
		UpdateType updateType = new UpdateType();
		updateType.setNd(nd);
		return updateTypeDao.findAllUpdateType(updateType);
	}
	
	
	
	public List<UpdateType> searchUpdateType(
			Map<String, Object> searchParams, Sort sort) {
		
		Map<String, SearchFilter> filters = SearchFilter.parse(searchParams);
		SearchFilter searchFilterBynd =filters.get("EQ_nd");
		String nd = "";
		if (searchFilterBynd!=null) {
			nd = (String) searchFilterBynd.value;
		}
		List<UpdateType> UpdateTypeDetailList;
		if (nd == ""){
			UpdateType updateType = new UpdateType();
			UpdateTypeDetailList= updateTypeDao.findAllUpdateType(updateType);
		}
		else{
			UpdateTypeDetailList= updateTypeDao.searchUpdateTypeByNd(nd);
		}
		return UpdateTypeDetailList;
	}

	public  UpdateType findByNdCode(String nd,String UpdateTypeCode){
		UpdateType updateType = new UpdateType();
		updateType.setNd(nd);
		updateType.setUpdateType(UpdateTypeCode);
		List<UpdateType> updateTypeList = updateTypeDao.findAllUpdateType(updateType);
		if (updateTypeList.size()==0){
			return null;
		} else {
			return (UpdateType)updateTypeList.get(0);
		}
	}
	
	
	public UpdateType findById(String id){
		UpdateType updateType = new UpdateType();
		updateType.setId(id);
		List<UpdateType> updateList = updateTypeDao.findAllUpdateType(updateType);
		if (updateList.size()==0){
			return null;
		} else {
			return (UpdateType)updateList.get(0);
		}
	}
	@Transactional
	public void saveUpdateTypeService(UpdateType updateType,
			Map<String, String> resultMap) {

	//	UpdateType updateTypeNew = findByNdCode(updateType.getNd(),updateType.getUpdateType());
	//	if (updateTypeNew==null){
	//		updateTypeDao.insertUpdateType(updateType);
	//	} else {
		//	updateTypeDao.updateUpdateType(updateType);
	//	}			
		if ((updateType.getId()==null)||(updateType.getId().equals(""))) {
			UpdateType updateTypeNew = findByNdCode(updateType.getNd(),updateType.getUpdateType());
			if (updateTypeNew!=null){
				getErrorMsg(resultMap,"saveError","系统中已存在相同调整类型！");
				return;
			}
			updateType.setId(UUID.randomUUID().toString());
			updateTypeDao.insertUpdateType(updateType);
		} else {
			UpdateType updateTypeNew = findById(updateType.getId());
			if (updateTypeNew.equals(updateType)){
				updateTypeDao.updateUpdateType(updateType);
			} else {
				getErrorMsg(resultMap,"saveError","调整类型信息与系统中不一致！");
			}
		}	
		
	}
	@Transactional
	public void delUpdateType(List<String> uptIds,Map<String, String> resultMa){
			for (String id : uptIds) {
				updateTypeDao.delUpdateType(id);
			}

//		UpdateType updateType = new UpdateType();
//		updateType.setId(id);
//		
//		updateTypeDao.delUpdateType(updateType);

			
	}


	public List<String> getAllNd() {
		Date nowTime=new Date(); 
		SimpleDateFormat dataFmt=new SimpleDateFormat("yyyy"); 
		String curYear = dataFmt.format(nowTime); 
		List<String> ndList = new ArrayList<String>();
		for (int i = 0; i < 5; i++) {
			ndList.add(String.valueOf(Integer.parseInt(curYear)+i));
		}
		return ndList;
	}	

	private void getErrorMsg(Map<String, String> resultMap,String flg, String reason) {
		resultMap.put("result", "fail");
		resultMap.put(flg, reason);
		resultMap.put("reason", "保存失败！");
	}
	
}
